# coding=utf-8

'''分页数据'''
class BasePaginateSerializer(object):
    """分页数据序列化基类"""

    def __init__(self, paginate): #简化代码可以满足对象的拷贝
        self.pg = paginate
        if not self.pg:
            return paginate
        self.has_next = self.pg.has_next  # 是否还有下一页
        self.has_prev = self.pg.has_prev  # 是否还有前一页
        self.next_num = self.pg.next_num  # 下一页的页码
        self.page = self.pg.page  # 当前页的页码
        self.pages = self.pg.pages  # 匹配的元素在当前配置一共有多少页
        self.total = self.pg.total  # 匹配的元素总数
        self.page_size = self.pg.per_page #一页最多显示多少条数据

    def get_object(self, obj):
        """对象的内容,系列化的个性操作,子类重写"""
        return {}

    def paginateInfo(self):
        """分页信息，是否有上下页，页数，总页数等"""
        return {
            # 是否有下一页，返回的是布尔值
            'has_next': self.has_next,
            # 是否有上一页，返回的是布尔值
            'has_prev': self.has_prev,
            # 下一页的页码
            'next_num': self.next_num,
            # 当前的页面
            'page': self.page,
            # 总页数
            'pages': self.pages,
            # 总条数
            'total': self.total,
            # 一页最多显示多少条数据
            'page_size': self.page_size
        }

    def to_dict(self):
        """序列化分页数据"""
        pg_info = self.paginateInfo()
        paginate_data = []
        #items当前页的数据列表，类型是list
        for obj in self.pg.items:
            paginate_data.append(self.get_object(obj))
        return {
            'paginateInfo': pg_info, #分页对象本身
            'totalElements': pg_info['total'], #总记录数
            'content': paginate_data #当前一页所需展示的数据列表
        }

class BaseSerializer(object):
    """对象序列化基类"""
    def __init__(self, data):
        self.data = data

    def to_dict(self):
        """个性化的系列化,子类重写 """
        return {}

'''把python对象转化成字典，调用页面上是列表的'''
class BsaeListSerializer(object):
    def __init__(self,data):
        self.data = data

    def to_dict(self):
        #个性化的函数，需要子类重写 #消息列表数据转化成字典
        return {}

'''不分页的列表'''
class BaseListSerializer(object):
    """对象组序列化基类"""
    def __init__(self, data):
        self.data_list = data
        #self.select_type_serializer()

    def select_type_serializer(self):
        if not self.data_list:
            return None
        if isinstance(self.data_list, list):  # 列表解析（判断是否为列表）
            if len(self.data_list) == 0:
                return None
            else:
                self.data_list = [dict(zip(result.keys(), result)) for result in self.data_list]

    def to_dict(self):
        """个性化的系列化,子类重写 """
        return {}














